package com.example.springmvcadv.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class AppConfig implements WebMvcConfigurer {

    /**
     * SpringMVC会遍历每个Controller，来设置一些信息
     */
    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        // 为指定的Controller添加路径前缀
        // 第二个参数，其中只有一个方法，c是方法参数，表示遍历的每个Controller，方法的返回值是boolean，表示是否添加前缀
//        configurer.addPathPrefix("api", c->{
//            System.out.println(c.getClass());
//            // 这样是所有Controller都添加api路径前缀
//            return true;
//        });

        // TestController不添加路径前缀，其他都要添加
//        configurer.addPathPrefix("api", c -> {
//            //这样打印出来可以看到，c是Controller
//            System.out.println("==================");
//            System.out.println(c.getClass());
//            //com.example.springmvcadv.controller.TestController
//            System.out.println(c.getName());//
//            if(c.getName().equals(TestController.class.getName())) return false;
//            return true;
//        });
    }

    /**
     * 添加拦截器（可以添加多个）
     * @param registry 拦截器注册器（注册拦截器：路径规则+拦截器对象）
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //学习一个方法，方法参数是什么类型（假如是X类型），就可以自己写一个类（重写X类或实现X接口）
//        registry.addInterceptor(new LoginInterceptor())
//                //拦截所有后端路径
//                .addPathPatterns("/api/**")
//                //排除登录和注册接口
//                .excludePathPatterns("/api/user/login")
//                .excludePathPatterns("/api/user/register");
    }
}
